// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
/**
 * _Utils.java
 * @author Jason Lu
 * @date 2014-1-2
 * @version 1.0
 */
package com.x52im.rainbowchat.http.util.ip;

import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.StringTokenizer;

import com.eva.framework.utils.LoggerFactory;

/**
 * @author Jason
 */
public class _Utils
{

	private static List<String> provinceList = null;

	static
	{
		provinceList = new ArrayList<String>();
		provinceList.add("北京");
		provinceList.add("天津");
		provinceList.add("上海");
		provinceList.add("重庆");
		provinceList.add("河南");
		provinceList.add("河北");
		provinceList.add("云南");
		provinceList.add("辽宁");
		provinceList.add("黑龙");
		provinceList.add("湖南");
		provinceList.add("安徽");
		provinceList.add("山东");
		provinceList.add("新疆");
		provinceList.add("江苏");
		provinceList.add("江西");
		provinceList.add("浙江");
		provinceList.add("山西");
		provinceList.add("湖北");
		provinceList.add("广西");
		provinceList.add("甘肃");
		provinceList.add("山西");
		provinceList.add("内蒙");
		provinceList.add("陕西");
		provinceList.add("吉林");
		provinceList.add("福建");
		provinceList.add("贵州");
		provinceList.add("广东");
		provinceList.add("青海");
		provinceList.add("西藏");
		provinceList.add("四川");
		provinceList.add("宁夏");
		provinceList.add("海南");
		provinceList.add("台湾");
		provinceList.add("香港");
		provinceList.add("澳门");
	}


	// -----------------------------------IPSeeker
	private static StringBuilder sb = new StringBuilder();
	/**
	 * 从ip的字符串形式得到字节数组形式
	 * 
	 * @param ip
	 *            字符串形式的ip
	 * @return 字节数组形式的ip
	 */
	public static byte[] getIpByteArrayFromString(String ip)
	{
		byte[] ret = new byte[4];
		StringTokenizer st = new StringTokenizer(ip, ".");
		try
		{
			ret[0] = (byte) (Integer.parseInt(st.nextToken()) & 0xFF);
			ret[1] = (byte) (Integer.parseInt(st.nextToken()) & 0xFF);
			ret[2] = (byte) (Integer.parseInt(st.nextToken()) & 0xFF);
			ret[3] = (byte) (Integer.parseInt(st.nextToken()) & 0xFF);
		}
		catch (Exception e)
		{
			LoggerFactory.getLog().warn("从ip的字符串形式得到字节数组形式报错");
		}
		return ret;
	}

	public static void main(String[] args)
	{
		System.out.println(provinceList.size());
	}
	/**
	 * @param ip
	 *            ip的字节数组形式
	 * @return 字符串形式的ip
	 */
	public static String getIpStringFromBytes(byte[] ip)
	{
		try
		{
			sb.delete(0, sb.length());
			sb.append(ip[0] & 0xFF);
			sb.append('.');
			sb.append(ip[1] & 0xFF);
			sb.append('.');
			sb.append(ip[2] & 0xFF);
			sb.append('.');
			sb.append(ip[3] & 0xFF);
			return sb.toString();
		}
		catch (Exception e)
		{
			LoggerFactory.getLog().warn("从ip的byte[]形式得到字符串形式报错："+e.getMessage());
		}
		
		return "";
	}

	/**
	 * 根据某种编码方式将字节数组转换成字符串
	 * 
	 * @param b
	 *            字节数组
	 * @param offset
	 *            要转换的起始位置
	 * @param len
	 *            要转换的长度
	 * @param encoding
	 *            编码方式
	 * @return 如果encoding不支持，返回一个缺省编码的字符串
	 */
	public static String getString(byte[] b, int offset, int len, String encoding)
	{
		try
		{
			return new String(b, offset, len, encoding);
		}
		catch (UnsupportedEncodingException e)
		{
			return new String(b, offset, len);
		}
	}

	public static String checkChinaArea(String area)
	{
		if (area!= null && provinceList.contains(area.length() > 2 ? area.substring(0, 2) : area))
			return "中国";
		return area;
	}

	public static String formatDate(Object date, String pattern)
	{
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}

	public static String getDayTime(int num, String pattern)
	{
		GregorianCalendar gregorianCal = new GregorianCalendar();
		gregorianCal.set(Calendar.DATE, gregorianCal.get(Calendar.DATE) + num);
		return formatDate(gregorianCal.getTime(), pattern);
	}
	
}
